home *** CD-ROM | disk | FTP | other *** search
- INTRO.4TH
- (ADVANTAGES OF FORTH)
-
- Preface:
- The purpose of this file is not just to tell u "Forth is
- Great", but rather to clarify just what advantages Forth has
- over other languages, and to communicate th "feel" of Forth in
- relation to programming tasks.
- I hope it does that job well enough to give u a sense of th
- possibilities, so that, when u pursue ur desire to see for
- urself what u can accomplish w/ it, u will be expecting to
- create elegance. And if u are intent, u will be gratified.
- Please read this w/o bias, and if u doubt any statements
- made, th author is prepared to provide proof or acceptable
- evidence, or upload a corrected version of this file.
- If, on th other hand, u are not willing to find out that
- there is a programming language considerably more capable &
- elegant than what u r familiar with, then better to not
- even give it a single quick scan! (grin)
- Giles
-
-
- Topic Headings
-
- Abreviation Definitions
- Commands That Fit
- Programming Environment
- Personal Experience
- What is Forth?
- Different Installations
- Examples
- Small Concept= Large Capability
- Grand Scale Programming
- Use
- My plans
- Your application
- Availability on CIS
- Learning Forth
- Social Aspects
- Problems
-
-
- Abreviation Definitions
-
- #, Number
- &, And
- cmd, Command
- hdw, Hardware
- r, Are
- sfw, software
- th, The
- u, You
- u're, You're
- ur, Your
- u've, You've
- w/, With
- w/o, Without
- 4th, Forth
-
-
- Commands That Fit
-
- Have u ever wished:
-
- 1. A particular command went about things just a little
- differently?
-
- 2. A particular command behaved consistantly, rather than
- doing th wrong thing at just th wrong time?
-
- 3. U had a particular command, that would make things
- SOOooooo simple?
-
- In Forth, th process of finding th code of a command &
- installing a rewritten version is trivial.
-
-
- Programming Environment
-
- Have u ever felt that programming would always be a
- pleasant experience, if only U never had to program around
- bad system sfw?
-
- Have u ever wished:
-
- 1. U could program twice as fast? ..Five times as fast?
- ..TEN times as fast?! And that u could debug th program as
- u write it, so that (generally) when u finished writing a
- module u wouldn't have to come back to it?
-
- 2. That all th clever little subroutines u've worked out
- were instantly available, w/o having to look for them, or
- take any special pains to integrate them into th present
- program.
-
- 3. That calling a subroutine required nothing more than
- naming it?
-
- 4. That someway ur programming environment would help u
- keep track of where u r, & how th routine u r working on
- now will affect other routines, or which ones will be
- affected?
-
- 5. That u could change th way ur compiler behaves? Or that u
- could add th ability to handle special cases w/o changing
- anything else?
-
- 6. That u could use hi-level commands, & a magic genie would
- come along & convert them to efficient machine code? Or maybe
- just th ones needing speed, & leaving th others in th most
- compact form to save memory?
-
- 7. That u never had to worry about linking library routines, or
- that ONE copy of routines would suffice for ALL processes?
-
- 8. That u could have a multitasking, multiuser operating system
- w/ all th features of, say for instance, OS9, but ALSO have th
- immediate utility of a powerful toolbox & programming language
- combined?
-
- 9. That u could bring th same, familiar environment &
- applications from obsolete hdw. to new hdw. w/ expanded
- capabilites, & easily add features to take advantage of th new
- hdw w/o having to change much if any of what u already have?
- Examples: Transfer ur system & applications to a Tandy Color
- Computer in order to have graphix that beat some MS-DOS &
- Macintosh machines at a fraction of th price.
- Or to an IBM styled machine, in order to take advantage of all
- th hdw options available, yet having an EFFECTIVE multasker,
- instead of being stuck w/ OS2.
-
- 10. That u had a powerful environment on which u could write a
- similar environment, (but with all ur own improvements, of
- course), and compile th new environment & have a system of ur
- very own, w/ no royalties owed to anyone? (Perhaps for ur own
- system to be manufactured & sold.)
-
- 11. To have th ability to implement other languages, such
- as BASIC, LISP, Pascal, Prolog simply & efficiently?
-
- In Forth, u can move about freely. There is no "black
- box" compiler to shackle u w/ unnecessary restraints. No
- restriction to predefined data structures. U cannot get
- lost in GOTOs or jumps because 4th neither has nor needs
- them.
- Forth assumes u know what u r doing, & often how u do it is
- implicit.
-
-
- Personal Experience
-
- Before I knew of the existance of Forth I knew I would
- have to have a language that was infinitely extensible, and
- selfcompiling to do the things I wanted to do. When I
- learned what Forth was, it was like manna from heaven.
- With systems such as OS9 having some of th advantages of
- Forth, & excellent file handling, and w/ the availability
- of a powerful text editor such as TSEdit, a person has a
- very effective system for gathering textual data piecemeal
- & editing it.
- But in using such a system, I have had to program around
- deficiencies of other languages, been so hampered in
- reaching the hdw. functions of the machine, that some
- applications that should have been done were not practical
- to tackle, (because of time restraints) and as a result
- been forced to use sfw for which we haven't the source.
- And so have been unable to adapt it exactly to our needs,
- or add enhancements and upgrades that we should have had.
- So, I am FORCED to incorporate the advantages of OS9 into
- Forth, as I can no longer do without 4th's other, inherent
- advantages.
-
-
- What is Forth?
-
- Forth is an infinitely extensible metacompilable
- language/op system in which subroutining is inherent.
- (Metacompilable is a Forth term meaning it can compile new
- versions of itself from source)
- The stack's use is direct and largely automatic, and you
- can directly manipulate it.
- Tho most implementations are sparse from an applications
- viewpoint, (tho I know of none that do not include an
- editor & assembler), it is so trivial to extend it, that
- you can relatively easily write a LISP or BASIC
- interpreter, C compiler, or a Prolog extension. (I have
- seen most of these in sigs or elsewhere.)
- Since Forth is so compact, (it compiles to only
- subroutine addresses), and so fast, (tho slower than
- Machine Lang. to do exactly the same operations,
- practically it's often faster, because of the better
- organization of the functional blocks), and it can
- duplicate the power of any existing language, as well as
- any you dream up that are MORE powerful, it's hard to deny
- that Forth can be the MOST powerful language there is. As
- a practical matter, complete control is in the programmer's
- hands, so the extensions will be just as bad as the
- programmer forces them to be! (grin)
- On the other hand, you don't have to say "stupid compiler
- writer! Why didn't he do it THIS way?!". You can just
- recompile the whole system to suit yourself! Good idea to,
- because that way, it is your own system. to sell as an
- application, developmment system, arcade game, or whatever,
- with no royalties owed to anyone, and as a complete
- standalone system.
-
-
- Different Installations
-
- It is also easily transportable. You can redefine the
- primitives for the new cpu, and recompile it, with all the
- resources of the present system at hand.
- And because of th small # of necessary primitives, & of
- th extreme modularity & interactive method of programming
- this allows, u will not believe how easy such a port is
- until u see it!
-
-
- Examples
-
- You may know that the RSdos BASIC PALETTE cmd (for th
- Coco) takes a slot number (0-15) and puts a color value
- (0-63) into it. The zero slot's hdw address is 65456. So
- I defined a PALETTE cmd in Forth thusly:
- : PAL -80 + C! ;
- : is a word called Colon, and is the most commonly used
- compiler. It enters the following word, (a word is a group
- of non-space characters bounded by spaces, in this case
- PAL), into the dictionary, and compiles the addresses of
- the following words, (which normally must have already been
- defined), into the dictionary as it's definition.
- -80 is the signed 16 bit integer equivalent of 65456.
- Mention of a number puts it on the stack.
- + takes the 2 top stack entries and adds them, leaving
- the result on top of the stack.
- ! is pronounced "store". It takes the second stack item
- and stores it in the address on top of the stack. But it
- stores SIXTEEN bit values. In this case we only want to
- store 1 byte, so we use Cstore, C being for "character". Of
- course C! is a different word from !.
- ; terminates all definitions started with :.
- So now instead of PALETTE8,38 as I would use in basic, I
- can do 38 8 PAL.
- 38 pushes 38 on the stack.
- 8 pushes on the 8.
- PAL first takes the top item and adds it and 65456 to
- give the address of slot 8, then stores 38 (second stack
- item) into one byte at that address. And all of a sudden,
- your text is orange.(grin)
- To make this cmd "system independent", you could first
- define a constant, SL0T, thusly:
- 65456 CONSTANT SL0T
- (Constant is a compiling word that compiles...You got it,
- Constants! (grin)
- Then define PAL thusly:
- : PAL SL0T + C! ;
- That way, only SL0T would have to be changed for another
- system. All system dependent values could be stored in a
- single place, and so be easy to set up for a different
- system.
- Here's an edited example of th procedure for installing a
- rewritten primitive, as explained by my friend Bob McIsaac:
- --------------
- ' <EMIT> DUMP ..display code being used.
- You can figure a new version then install the hex code
- using:
- CREATE EMIT NNNN , NNNN , NNNN , NEXT SMUDGE
- If it works then install it:-
- ' EMIT ' <EMIT> CFA ! FREEZE
- This works because the code field addrs of a word always
- points to executable code and this can be anywhere in
- memory.
- ---------------
- In this example:
- A dictionary header is made up like this:
- Up to th 1st 31 bytes are th name field.
- Next 2 bytes are th LINK FIELD, which points to th
- previously defined word.
- Next 2 bytes r th CODE FIELD, & point to executable code.
- (Th following parameter field, if th word is a primitive.)
- The remaining bytes r th PARAMETER FIELD, which may contain
- executable code, addresses for other words, variable
- storage, constant storage, tables, or what have u.
- ' (pronounced "tick") puts th PFA (Parameter Field
- Address) of th word following it, on th stack.
- DUMP gives a hex dump starting at th address on th stack.
- CREATE creates a dictionary header for th word following
- it, in which th 1st character is altered (smudged, by
- flipping a bit) so that it can't be found, (while it is
- being defined).
- , (Comma) Inserts th 16 bit value on top th stack at th
- current end of th dictionary, & bumps th dictionary pointer
- 16 bits, (to th NEW end of dictionary).
- NEXT puts code in place for a "return" for th virtual
- Forth machine.
- SMUDGE flips th flipped bit in th altered letter of th
- keyword, so that actually, in this case, it's working more
- like an "unsmudge". (grin)
- CFA takes a PFA & converts it to a CFA (Code Field
- Address). In this case, th PFA of <EMIT> is converted to
- its CFA
- ! Takes th second stack item (in this case, th PFA of
- EMIT) & stores it in 16 bits at th address on top of th
- stack, (in this case, th CFA of <EMIT>).
- FREEZE sets th system so that it permanently recognizes
- this installation.
-
-
- Small Concept= Large Capability
-
- Just a few additional concepts give u a great deal of
- added power. Understanding "Compile time" & "Run time"
- behaviors of words, and "Compiling" words, allows u to do
- things in th most direct way possible.
- And th "Reverse Polish Notation" use of th stack allows
- elimination of all other local variables.
- I find Forth the easiest language in which to
- conceptualize a task. Many procedures that would not be
- trivial in any OTHER design of language, can b programed in
- Forth out of hand. Each part of the problem can always be
- programmed seperately, as a preliminary word to the final
- word that does the whole job. Also you can start out with
- a word that just handles limited conditions, and keep
- adding new functions to it as you elaborate on the problem.
- If you choose word names carefully, Forth is self
- documenting, also you can add comments inside (or outside,
- of course), the definition.
-
-
- Grand Scale Programming
-
- I have talked about designing or redesigning whole
- systems, for customization, or porting to new hdw, & I
- expect it sounds like something that someone might spend
- months, or maybe even years doing, but it more likely would
- take u only a matter of days, because:
-
- 1. Forth systems tend to be very small
-
- 2. U usually have th tools to do things in th most direct
- way possible. When u don't, u can MAKE them.
-
- 3. Th combination of interactive programing w/ very small
- modules which are all subroutines usable individually,
- allows u to very efficiently "snowball" th power of ur
- code. In other words, tho in any language a good
- programmer tries to write code whose power increases
- geometrically w/ th amount of code he writes, Forth was
- designed to allow u to do this very efficiently.
-
- 4. Th modularity, interactivity, use of subroutines by
- naming them, as well as automatic stack use, makes
- debugging a breeze!
-
-
- Use
-
- You can code interactively, at the term, to test things,
- but then for real work, you enter the editor, and edit
- scripts or source onto disk.
- Then you can take input from disk with a LOAD cmd, and do
- execution and compiling directly from disk (until your file
- gives the cmd to take input from term).
- Forth can accomplish everything OS9 can, simpler.
-
-
- My plans
-
- I've always wanted to write my own OS because I
- eventually wanted to put out my own hdw, and wanted
- complete control of maintenance and no royalties. There are
- many PD Forths, and Forth workalikes out there to build
- upon.
- The system I want to develop now, would include
- "Universal Random Block Access", or URBA which means the
- ability to access all common disk formats, (Mac, MSdos,
- Amiga, OS9, RSdos, CPM, ProDOS, CDOS, etc.) Each format
- description would be contained in a "DOS Descriptor Block"
- data structure, and if a new format became popular, you
- could just add another DDB. With additional device
- descriptors, and drivers, you could access WORMs, and VHS,
- etc.
- Naturally it will have multitasking, & I want to add all
- the most useful commands of OS9. Of course it will always
- have the advantage of being a programming lang. as well as
- an OS, over OS9.
-
-
- Your Application
-
- Altho there are versions that run on top of OS9, Flex,
- CPM, MSdos, etc., etc, to get the greatest advantages, you
- need Forth on the bottom!
-
-
- Availability on CIS
-
- Put your checkbook away! You can get versions of Forth
- for the popular CPUs for down-load time:
-
- 6809
-
- The TIL09 system is on Cocosig (g coco), in "Languages &
- Op. Systems" Lib. It makes ROM calls on the Tandy Color
- Computer.
- Here is a list of necessary files:
- TIL09.DOC, &
- M4TH.DOC, Describe operation & capabilities of TIL09.
- TEDIT.DOC, Describes editor use, & other necessary commands
- imbedded in th editor.
- TILBUG.4TH, Bug fixes.
- TIL09.GLO, System glossary.
- TILASM.DOC, Overview of assembler.
- TIL09.BIN, Executable system. From BASIC, do
- LOADM"TIL09":EXEC. Uses logical sector/block disk access.
- TILDOS.ARC, TILDOS uses RSDOS disk files. Instructions are
- included.
- META1.BIN, &
- META2.BIN, are source for TIL09.
- TDCMP.BIN, is source for th metacompiler/decompiler.
- TEDIT.BIN, is th source for th editor.
- TILASM.4TH, source for th assembler.
-
- 68000
-
- Do a g clm332 to get to Computer Languages Magazine's
- forum, & there, in th Forth library u can find:
- README.68K, installation instructions.
- F83-68.BIN, the executable Forth system. (Uses CPM disk
- access.)
- KER68K.SCR, source, necessary for adapting the system &
- helpful in understanding it.
- META68.SCR, source for the metacompiler, n case you want
- to alter the system, or make a completely new one.
- UTL68K.SCR, source for utilities.
- Atari16 forum has basically th same forth as F83-68K, but
- different disk access extensions for a non CP/M Forth.
-
- 8086
-
- Also in CLM's Forth Libr.:
- README.PC, Dox for MS-DOS 4th.
- CMD4TH.BIN, IBM-PC dedicated Forth. (Does NOT go thru
- PC-DOS)
- F83-86.BIN, DOES go thru PC/MS-DOS.
- KER-86.SCR, System source.
- CPU-86.SCR, Assembler source.
- META86.SCR, Metacompiler source.
-
- 8080
-
- Also in CLM's Forth Libr.:
- README.80, Dox.
- KERNAL.SCR, System source. (CPM80)
- F83-80.BIN, Executable system.(CPM80)
-
-
- Learning Forth
-
- For a first text, I'd recommend:
- "Starting Forth" by Leo Brodie. A glossary is in Cocosigs
- DL9...
- TIL09.GLO. Maybe not Forth '83 de rigueur, but it is
- helpful. Th entire text for th:
- Forth '83 Standard is available in th Forth forum, (g
- forth), as FORTH-.DOC.
- There is also a reference file in Forth lib in CLM (g
- clm332)....
- 4THRES.TX0 (Forth resorce). You will also find FIG's
- address in here.
- We r planning a 4th workshop in Cocosig. Anyone
- interested may contact me for th schedule.
- Also, if anyone knows of other live "Forth
- Introductions", I'll appreciate hearing of them.
-
-
- Social Aspects
-
- There are people, some of whom r pretty good programmers,
- that consider Forth a "Cult" language. I've tried to figure
- why this is so, (*I* don't feel like a cultist.(grin)), & so
- far I've come up w/ these possibilities:
-
- 1. Forth IS after all fundamentally "different" from any
- other language. (Despite its similarity to LISP.)
-
- 2. Once some people realize how much they can accomplish w/
- Forth, they may get overexcited, & sound as tho they have
- gone overboard! (Hehe..couldn't happen to ME!)
-
- 3. I think it likely that Forth is better than what they
- (th people that call it a "cult" lang.) are used to, & maybe,
- for whatever reason, they would rather not find that out!(grin)
-
- 4. Tho Forth tends to attract good programmers, (Th best!),
- it also attracts a few poor ones. (I once saw a guy use a
- whole screen to define a single primitive. (grin)) Such a
- programmer is not likely to present Forth to a newcommer in
- its best light, also if th newcommer is himself a fairly
- good programmer, he's likely to figure that if his less
- capable friend thinks well of a language, it's probably a
- dud! hehe
- So, then, if he hears th enthusiasm of someone who really
- knows & uses th potential of Forth somewhere near its
- fullest, he's likely to attribute such enthusiasm to
- "cultism". (grin).
-
-
-
- Problems
-
- Plex or contact me as follows:
- Giles Spruill 73347,2651
- Advanced Automation, Inc.
- 1217 N.E. Miami Ct., Suite 6
- Miami, FL 33132
- Ph# (305) 371-6408
-
- I would also appreciate any advice that would help make
- this file better.